home *** CD-ROM | disk | FTP | other *** search
/ Plug-In Power Pack for Netscape Communicator / Plug-In Power Pack for Netscape Communicator.iso / plugins / dataviews / dvtools / demos / surfdemo / surftog.c < prev    next >
C/C++ Source or Header  |  1997-07-10  |  7KB  |  256 lines

  1. #ifndef lint
  2. static char SccsId[]= "@(#)surftog.c    V1.8    3/17/95";
  3. #endif
  4.  
  5. /*------------------------------------------------------------------
  6. | file name -- surftog.c
  7. |
  8. | Functions related to the toggles that control the graph attibutes.
  9. |
  10. | functions             Description
  11. | ---------             -----------
  12. | InitToggleControls    Initializes the toggle input objects
  13. | HandleToggle         Handles all events associated with the toggles
  14. |
  15. | toggle_context    Toggles the context flag of the graph
  16. | invert_graph        Inverts the graph's data
  17. | change_format        Changes the type of graph being displayed
  18. |
  19. |-----------------------------------------------------------------*/
  20.  
  21.  
  22. #include "std.h"
  23. #include "dvstd.h"
  24. #include "dvtools.h"
  25. #include "VOstd.h"
  26. #include "dvGR.h"
  27. #include "Tfundecl.h"
  28. #include "surfdata.h"
  29. #include "dvinteract.h"
  30. #include "VOfundecl.h"
  31. #include "VPfundecl.h"
  32. #include "VUerfundecl.h"
  33. #include "surffundecl.h"
  34.  
  35.  
  36. GLOBALREF DISPFORM VDsize, VD3dsurface, VDcontour, VDfcontour;
  37.  
  38. /* ------------------------------------------------------------------- */
  39. /* Declare information for the toggle objects that set graph attributes */
  40. /* ------------------------------------------------------------------- */
  41. #define NUM_TOGGLES     4
  42. #define COLOR_TOGGLE    0
  43. #define CONTEXT_TOGGLE    1
  44. #define INVERT_TOGGLE    2
  45. #define FORMAT_TOGGLE    3
  46.  
  47. /* Strings to replace defaults set in DV-Draw */
  48. LOCAL CHAR
  49. * ColorStr[]=
  50. {"Change\nColor"}, *ContextStrs[]=
  51. {"Context\nON", "Context\nOFF"}, *InvertStrs[]=
  52. {"Not\nInverted", "Inverted"}, *FormatStrs[]=
  53. {"Surface\nPlot", "Size\nEncoding",
  54.  "Contour", "Filled\nContour"},
  55. /* NOTE: Toggle Names can't start with a HandlePickEvent name, i.e:
  56.   QUIT_COMMAND - Q, FORMULA_COMMAND - F, ZRANGE_COMMAND - Z, PLOT_COMMAND - P,
  57.   THRESHOLD_COMMAND - T
  58. */
  59.  *ToggleName[]=
  60. {"ChangeColor", "ChangeContext", "Invert", "ChangeFormat"}, **ToggleStr[]=
  61. {ColorStr, ContextStrs, InvertStrs, FormatStrs};
  62.  
  63. LOCAL INT ToggleSize[NUM_TOGGLES] =
  64. {1, 2, 2, 4};
  65. LOCAL OBJECT ToggleInput[NUM_TOGGLES];
  66. LOCAL INT
  67.   ContextVal = 1, ColorVal;
  68. LOCAL ADDRESS ToggleBuffer[NUM_TOGGLES] =
  69. {
  70.   (ADDRESS) & ColorVal,
  71.   (ADDRESS) & ContextVal,
  72.   (ADDRESS) & Plot.inverted,
  73.   (ADDRESS) & Plot.format
  74. };
  75. LOCAL INT ToggleType[NUM_TOGGLES] =
  76. {
  77.   V_L_TYPE,
  78.   V_L_TYPE,
  79.   V_F_TYPE,
  80.   V_L_TYPE
  81. };
  82.  
  83. /***************** Begin Function Declarations *************/
  84. LOCAL  void toggle_context V_P_((void));
  85. LOCAL  void invert_graph V_P_((void));
  86. LOCAL  void change_format V_P_((void));
  87. /***************** End Function Declarations *************/
  88.  
  89. /*------------------------------------------------------------------
  90. |
  91. | InitToggleControls
  92. |    This function initializes each toggle.  The label of the toggle
  93. |    is set, its vdp is rebound and a service function is posted.
  94. */
  95. void InitToggleControls 
  96. V_P_ ((void))
  97. {
  98.   INT i;
  99.   OBJECT it;
  100.   VARDESC vdp;
  101.  
  102.   /* Setup the Input Toggles */
  103.   for (i = 0; i < NUM_TOGGLES; i++)
  104.     {
  105.       ToggleInput[i] = VOdrGetNamedObject (MainDrawing, ToggleName[i]);
  106.  
  107.       /* DV-Draw does not let you specify a string with a carriage return,
  108.       |  so we must modify some of the input object strings.
  109.       */
  110.       it = VOinTechnique (ToggleInput[i], DONT_SET_THE_VALUE);
  111.       VOitPutList (it, TEXT_LIST, (ADDRESS) ToggleStr[i], ToggleSize[i]);
  112.  
  113.       /* Rebind the data */
  114.       vdp = GetVdp (ToggleInput[i]);
  115.       (VOID) TvdPutBuffer (vdp, ToggleBuffer[i]);
  116.       VPvdtype (vdp, ToggleType[i]);
  117.  
  118.       /* Setup the Service Functions */
  119.       (VOID) VUerServiceResultPost ((OBJECT) i, HandleToggle,
  120.                                     (ADDRESS) NULL, 0,
  121.                                     ToggleInput[i], INPUT_ACCEPT, i);
  122.     }
  123.  
  124. }
  125.  
  126. /*------------------------------------------------------------------
  127. |
  128. | HandleToggle
  129. |    This function handles events associated with the toggles.
  130. */
  131. /* ARGSUSED */
  132. int 
  133. HandleToggle (client, request, toggle_type, loc, argptr)
  134.      OBJECT client;          /* Client initiating the call */
  135.      EVENT_REQUEST request;  /* Event request triggering the call */
  136.      int toggle_type;        /* Label from service result post */
  137.      OBJECT loc;             /* Current location object */
  138.      ADDRESS argptr;         /* User arguement block */
  139. {
  140.   switch (toggle_type)
  141.     {
  142.     case COLOR_TOGGLE:
  143.       DrawColorControls ();     /* found in surfcolor.c */
  144.       break;
  145.     case CONTEXT_TOGGLE:
  146.       toggle_context ();
  147.       break;
  148.     case INVERT_TOGGLE:
  149.       invert_graph ();
  150.       break;
  151.     case FORMAT_TOGGLE:
  152.       change_format ();
  153.       break;
  154.     default:
  155.       break;
  156.     }
  157.   return INPUT_ACCEPT;
  158. }
  159.  
  160. /*------------------------------------------------------------------
  161. |
  162. | toggle_context
  163. |    This function toggles the graph's context flag.
  164. */
  165. LOCAL void toggle_context 
  166. V_P_ ((void))
  167. {
  168.   if (ContextVal == 1)
  169.     /* Turn context on in datagroup */
  170.     VPdgcontext (GraphDgp, V_FCONTEXT, 1);
  171.   else
  172.     /* Turn context off in datagroup */
  173.     VPdgcontext (GraphDgp, V_FCONTEXT, 0);
  174. }
  175.  
  176. /*------------------------------------------------------------------
  177. |
  178. | invert_graph
  179. |    This function inverts the thresholds associated with the graph.
  180. */
  181. LOCAL void invert_graph 
  182. V_P_ ((void))
  183. {
  184.  
  185.   FLOAT temp;
  186.   INT i;
  187.   SHORT tempupper;
  188.  
  189.   /* Change the threshold values */
  190.   for (i = 0; i < 3; i++)
  191.     ThreshValue[i] *= -1.0;
  192.   temp = ThreshValue[2];
  193.   ThreshValue[2] = ThreshValue[0];
  194.   ThreshValue[0] = temp;
  195.  
  196.   /* Change the man and max of the data */
  197.   temp = Formula.zmin;
  198.   Formula.zmin = Formula.zmax * -1.0F;
  199.   Formula.zmax = temp * -1.0F;
  200.   (VOID) S_SPRINTF (TextStr[ZMIN_INPUT], "%.6g", Formula.zmin);
  201.   (VOID) S_SPRINTF (TextStr[ZMAX_INPUT], "%.6g", Formula.zmax);
  202.   if (Plot.automaticz == NO)
  203.     {
  204.       (VOID) TdpDrawNextObject (MainDrawport, TextInput[ZMAX_INPUT]);
  205.       (VOID) TdpDrawNextObject (MainDrawport, TextInput[ZMIN_INPUT]);
  206.     }
  207.  
  208.   /* Update the threshold tables */
  209.   tempupper = ThreshTable[0].upperlimit;
  210.   ThreshTable[0].upperlimit = 32767 - ThreshTable[2].upperlimit;
  211.   ThreshTable[1].upperlimit = 32767 - ThreshTable[1].upperlimit;
  212.   ThreshTable[2].upperlimit = 32767 - tempupper;
  213.   DrawThreshRect (ThreshEchoArea);
  214.  
  215. }
  216.  
  217.  
  218. /*------------------------------------------------------------------
  219. |
  220. | change_format
  221. |    This function switches the graph type.
  222. */
  223. LOCAL void change_format 
  224. V_P_ ((void))
  225. {
  226.   DISPFORM graph_type;
  227.   DV_BOOL on_off_flag;
  228.  
  229.   /* Determine the graph attributes base on the format type */
  230.   switch (Plot.format)
  231.     {
  232.     case SIZE:
  233.       graph_type = VDsize;
  234.       on_off_flag = (DV_BOOL) NO;
  235.       break;
  236.     case SURFACE:
  237.       graph_type = VD3dsurface;
  238.       on_off_flag = (DV_BOOL) YES;
  239.       break;
  240.     case CONTOUR:
  241.       graph_type = VDcontour;
  242.       on_off_flag = (DV_BOOL) YES;
  243.       break;
  244.     case FILLED_CONTOUR:
  245.       graph_type = VDfcontour;
  246.       on_off_flag = (DV_BOOL) YES;
  247.       break;
  248.     default:
  249.       break;
  250.     }
  251.  
  252.   /* Set the graph attributes */
  253.   VPdgdf (GraphDgp, graph_type);
  254.   VPdgcontext (GraphDgp, V_FV_TICS | V_FV_LABEL_TICS, on_off_flag);
  255. }
  256.